import { defineConfig ,loadEnv} from "vite";
import AutoImport from "unplugin-auto-import/vite";
import Components from "unplugin-vue-components/vite";
import { ElementPlusResolver } from "unplugin-vue-components/resolvers";
import vue from "@vitejs/plugin-vue";
import { join, resolve } from "path";
import chalk from "chalk";

const env= loadEnv('',__dirname)
console.log(chalk.green(`环境变量：${JSON.stringify( env)}`))
// const appName = process.env["npm_config_project"] || "";
const appName = env['VITE_APP_NAME'] || ""; // 应用名称

console.log(
  chalk.blue("当前应用：" + (appName || "未设置应用，默认为根应用"))
);

//  注意，vite 里的路径相关配置，相对会根据root参数来重新定义，因此使用绝对路径是最稳妥的
// 应用路径
let appPath =join(__dirname, "index.html"); // 默认入口文件
// 项目根路径
let rootPath = "";
let outputDir = join(__dirname, "dist/root"); // 默认输出路径
if (appName) {
  rootPath = join(__dirname, `src/apps/${appName}`);
  appPath =join(__dirname, `src/apps/${appName}/index.html`);
  outputDir =join(__dirname, `dist/${appName}`);
}
console.log(chalk.green(`应用路径：${appPath}`))
console.log(chalk.green(`项目根路径：${rootPath}`))
console.log(chalk.green(`输出路径：${outputDir}`))
console.log(chalk.green(`当前静态资源目录：${join(__dirname, "public")}`))



// https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    AutoImport({
      resolvers: [ElementPlusResolver()],
    }),
    Components({
      resolvers: [ElementPlusResolver()],
    }),
  ],
  base: "",
  // root: "src/projects/test",
  root: rootPath,
  envDir:__dirname, // 更改root后，需要修改此配置，需要使用绝对路径
  publicDir:join(__dirname, "public"),  // 静态资源目录，默认为 root/public 是相对于root 的路径，修改root后，需要修改此配置，需要使用绝对路径
  resolve: {
    alias: {
      "@": join(__dirname, "src"),
      "@project": join(__dirname, "src/apps"),
    },
    extensions: [".mjs", ".js", ".tsx", ".jsx", ".json", ".ts"],
  },
  server: {
    proxy: {
      // '/api/business': {
      //   target: "http://192.168.1.110:63011",
      //   changeOrigin: true,
      //   rewrite: (path, ...ars) => {
      //     console.log(path, ars);
      //     path=path.replace('/api/business','');
      //     return path;
      //   },
      // },

      "/api": {
        target: "http://192.168.0.23:19901",
        changeOrigin: true,
        rewrite: (path, ...ars) => {
          return path;
        },
      },
      "/api/FileServer": {
        target: "http://192.168.0.23:19901",
        changeOrigin: true,
        rewrite: (path, ...ars) => {
          return path;
        },
      },
      "/geoserver": {
        target: "http://192.168.1.222:8088",
        changeOrigin: true,
        rewrite: (path, ...ars) => {
          console.log(path, ars);
          return path;
        },
      },
      "/gis/baidu": {
        target: "https://api.map.baidu.com/",
        changeOrigin: true,
        rewrite: (path, ...ars) => {
          console.log(path, ars);
          return path;
        },
      },
    },
  },
  build: {
    rollupOptions: {
      input: {
        // 配置输入的入口文件，语法： { [entryName: string]: string }
        // main: resolve(__dirname, "index.html"),
        // test: resolve(__dirname, "src/apps/test/index.html"),
        main: resolve(__dirname, appPath),
      },
      output: {
        // dir: "dist",
        dir: outputDir,
        /**
         * 配置静态资源输出路径  以 dog.png 为例
         * [name] 表示文件名， dog
         * [hash] 表示文件 hash 值， 如 7a7a7a7a7a，基于文件内容生成 通过例如 [hash:10] 设置一个特定的哈希值长
         * [extname] 表示文件扩展名 带点，如 .png
         * [ext] 表示文件扩展名 不带点，如  png
         */
        assetFileNames: `assets/[name]-[hash][extname]`,
        /**
         * js 文件，通常是一些依赖库，导入等
         * [name] chunk 的名称。它可以通过 output.manualChunks 选项显示的设置，或者通过插件调用 this.emitFile 设置。否则，它将会根据 chunk 的内容确定。
         * [hash] chunk 的哈希值，依据内容生成。
         * [format] 输出格式，例如 es 或 cjs
         */
        chunkFileNames: `assets/chunks/[name]-[hash].js`,
        /**
         * index.html 中引入的js入口文件 的输出路径
         * [name] 表示入口文件名，main，test input 中设置的 entryName
         */
        entryFileNames: `assets/entry/[name]-[hash].js`,
        compact: true,
        // manualChunks: (id: string) => {
        //   //配置分包
        //   if (id.includes("node_modules")) {
        //     return id
        //       .toString()
        //       .split("node_modules/")[1]
        //       .split("/")[0]
        //       .toString(); // 拆分多个vendors
        //   }
        // },
      },
    },
  },
  
});
